#include<bits/stdc++.h>
using namespace std;
const int NN=1e6+4;
multiset<int>st[2][NN];
struct segment_tree
{
    int minw,maxw,val;
}tr[NN<<2];
void build(int u,int l,int r)
{
    tr[u]={(int)1e9,(int)-1e9,(int)1e9};
    if(l==r)
        return;
    int mid=l+(r-l)/2;
    build(u<<1,l,mid);
    build(u<<1|1,mid+1,r);
}
void pushup(int u)
{
    tr[u].val=min(min(tr[u<<1].val,tr[u<<1|1].val),tr[u<<1|1].minw-tr[u<<1].maxw+1);
    tr[u].minw=min(tr[u<<1].minw,tr[u<<1|1].minw);
    tr[u].maxw=max(tr[u<<1].maxw,tr[u<<1|1].maxw);
}
void modify(int u,int p,int pl,int pr)
{
    if(pl==pr)
    {
        if(!st[0][pl].size())
            tr[u].minw=1e9;
        else
            tr[u].minw=*st[0][pl].begin();
        if(!st[1][pr].size())
            tr[u].maxw=-1e9;
        else
            tr[u].maxw=-*st[1][pr].begin();
        return;
    }
    int mid=pl+(pr-pl)/2;
    if(p<=mid)
        modify(u<<1,p,pl,mid);
    else
        modify(u<<1|1,p,mid+1,pr);
    pushup(u);
}
int main()
{
    freopen("stone.in","r",stdin);
    freopen("stone.out","w",stdout);
    build(1,1,1000000);
    int q;
    scanf("%d",&q);
    multiset<int>minr,maxl;
    while(q--)
    {
        char opt[3];
        int l,r;
        scanf("%s%d%d",opt,&l,&r);
        r--;
        if(opt[0]=='A')
        {
            minr.insert(r);
            maxl.insert(-l);
            st[0][l].insert(r);
            st[1][r].insert(-l);
        }
        else
        {
            minr.erase(minr.find(r));
            maxl.erase(maxl.find(-l));
            st[0][l].erase(st[0][l].find(r));
            st[1][r].erase(st[1][r].find(-l));
        }
        modify(1,l,1,1000000),modify(1,r,1,1000000);
        int x=-*maxl.begin(),y=*minr.begin();
        if(x<=y)
            printf("%d\n",*st[0][x].begin()+*st[1][y].begin()+1);
        else
            printf("%d\n",tr[1].val);
    }
    return 0;
}